#ifndef __ALGORITMOS_H__
#define __ALGORITMOS_H__

#include "mapa.h"
#include <vector>

#define DIJKSTRA 0
#define ASTAR_EUCLID 1
#define ASTAR_MANH 2
#define ASTAR_HEUR3 3
#define ASTAR_HEUR4 4

#define NO_EXPLORADO '.'
#define VISITADO 'e'
#define SOLUCION 'o'

#define INFINITO numeric_limits<float>::infinity()


extern void resolverDijkstra(Mapa* M, casillero inicio, casillero destino);
extern void resolverAStar_Eucl(Mapa* M, casillero inicio, casillero destino);
extern void resolverAStar_Manh(Mapa* M, casillero inicio, casillero destino);
extern void resolverAStar_Heur3(Mapa* M, casillero inicio, casillero destino);
extern void resolverAStar_Heur4(Mapa* M, casillero inicio, casillero destino);


void resolver(Mapa* M, unsigned int algoritmo, casillero inicio, casillero destino);


void mostrarSolucion(const std::vector<std::vector<unsigned char> > *recorrido);


#endif //__ALGORITMOS_H__
